//
//  NSString+Category.h
//  LNUniversal
//
//  Created by liu nian on 15/5/25.
//  Copyright (c) 2015年 Liu Nian site:http://iliunian.com. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface NSString (Category)
#pragma mark encrypt
- (NSString *)MD5Hash;
+ (NSString *)stringWithMD5OfFile:(NSString *)filePath;
- (NSString *)SHA1;
- (NSString *)MD5EncodedString;

- (NSString *)base64EncodedString;
- (NSString *)URLEncodedString;
- (NSString *)URLEncodedStringWithCFStringEncoding:(CFStringEncoding)encoding;
- (NSString *)URLDecodedString;
- (NSData *)HMACSHA1EncodedDataWithKey:(NSString *)key;
#pragma mark NSUserDefaults
+ (void)setUserDefault:(NSString *)key byValue:(NSString *)value;
+ (NSString *)getUserDefault:(NSString *)key;
+ (void)deleteUserDefault:(NSString *)key;

#pragma mark 正则
//只能输入汉字
- (BOOL)isValidateChinaChar;
//身份证号码
- (BOOL)isValidateIdentityCard;
//邮箱
- (BOOL)isValidEmail;
//中国大陆手机号码
- (BOOL)isValidPhoneNum;
//身份证上的姓名
- (BOOL)isValidateCHNameChar;
//纯数字
- (BOOL)isTypeNumber;
//是否包含特殊字符
- (BOOL)isContainSpecialCharacter;
//是否是否仅包含英文、中文、数字
- (BOOL)isContainNonEnglishAndChineseCharacter;
//字母、数字或下划线
- (BOOL)isContainNonEnglishAndUnderscores;
//字母、数字或下划线中文
- (BOOL)isContainNonEnglishAndUnderscoresAndChinese;

- (BOOL)isValidateUserName;
- (BOOL)isValidateUserNameLength:(NSString *)length;
- (BOOL)isValidateTagLength:(NSString *)length;
//是否只包含空格和换行
- (BOOL)isWhitespaceCharacterSet;

#pragma mark - Size
/**
 *  获取文本实际区域
 *
 *  @param size 最大区域
 *  @param font 字体
 *
 *  @return 文本的实际区域
 */
- (CGRect)rectWithSize:(CGSize)size font:(UIFont *)font;
#pragma mark Null -> empty string
/**
 *  去掉前后空格:whitespaceAndNewlineCharacterSet
 *
 *  @return 字符串
 */
- (NSString *)trimString;
/**
 *  判断是否为空字符串和NSNull
 *
 *  @return 字符串
 */
- (BOOL)isEmptyOrNull;
/**
 *  判断是否为NSNull是的话返回空字符串
 *
 *  @return 字符串
 */
- (NSString *)isNotNull;
/**
 *  计算字符串字数
 *
 *  @return 字符数目
 */
- (NSUInteger)countWord;

@end
#pragma mark Device
@interface NSString (Device)

/**
 *  获取设备MAC地址，AABBCCDDEEFF
 *
 *  @return MAC地址
 */
+ (NSString *)getMACAddress;

/**
 *  获取设备IP地址
 *
 *  @return 设备IP地址
 */
+ (NSString *)getWLanIPAddresses;
+ (NSString *)getHWAddresses;

// 取得用户接入的AP信息
+ (id)fetchSSIDInfo;
/**
 *  获取APP版本信息
 *
 *  @return CFBundleShortVersionString
 */
+ (NSString *)appVersionString;
/**
 *  获取设备系统版本情况
 *
 *  @return [UIDevice currentDevice].systemName,[UIDevice currentDevice].systemVersion
 */
+ (NSString *)systemVersionString;
/**
 *  获取设备类型
 *
 *  @return [UIDevice currentDevice].model
 */
+ (NSString *)deviceModelString;
/**
 *  获取设备机型 eg:Phone 6 Plus (A1522/A1524),iPad Mini 2G (A1491)
 *
 *  @return 机型字符串
 */
+ (NSString*)deviceMachineModel;
/**
 *  获取设备UUID
 *
 *  @return [[[UIDevice currentDevice] identifierForVendor] UUIDString]
 */
+ (NSString *)deviceUUIDString;
/**
 *  当前运营商信息
 *
 *  @return 字符串
 */
- (NSString *)currentRadioAccessTechnology;
/**
 *  当前运营商信息组成的字典
 *
 *  @return 字符串
 */
- (NSMutableDictionary *)subscriberCellularProvider;
@end

@interface NSString (SandBox)
/**
 *  程序主目录，可见子目录(3个):Documents、Library、tmp
 *
 *  @return Home
 */
+ (NSString *)homePath;
/**
 *  程序目录，不能存任何东西
 *
 *  @return 程序目录
 */
+ (NSString *)appPath;
/**
 *  Documents 文档目录，需要ITUNES同步备份的数据存这里，可存放用户数据
 *
 *  @return Documents
 */
+ (NSString *)docPath;
/**
 *  配置目录，配置文件存这里
 *
 *  @return 配置目录，配置文件存这里
 */
+ (NSString *)libPrefPath;
/**
 *  缓存目录，系统永远不会删除这里的文件，ITUNES会删除
 *
 *  @return 缓存目录，系统永远不会删除这里的文件，ITUNES会删除
 */
+ (NSString *)libCachePath;
/**
 *  临时缓存目录，APP退出后，系统可能会删除这里的内容
 *
 *  @return 临时缓存目录，APP退出后，系统可能会删除这里的内容
 */
+ (NSString *)tmpPath;
/**
 * 判断目录是否存在，不存在则创建
 *
 *  @param path 文件路径
 *
 *  @return 判断目录是否存在，不存在则创建
 */
+ (BOOL)hasLive:(NSString *)path;
/**
 *  指定一个bytes 数值，返回数据存储大小 eg: 3KB, 8MB, 9GB
 *
 *  @param value 单位是 byte
 *
 *  @return 格式化的数据大小字符串
 */
+ (NSString *)transformedValue:(long long)value;
@end